\documentclass[titlepage,a4paper]{article}

\usepackage{zhfontcfg}

\usepackage{graphicx}
\usepackage{longtable}
\usepackage{array}
\usepackage{color}
\usepackage[colorlinks,linkcolor=black]{hyperref}
\usepackage{multicol}

\newcommand{\mb}{\mbox}
\newcommand{\q}{\quad}
\renewcommand{\today}{\number\year 年 \number\month 月 \number\day 日}
\title{软件工程第一次作业}

\author{颜开}
\date{\today}

\begin{document}

\maketitle

\section{软件工程的名词分类}
\begin{center}
% use packages: array,longtable
\begin{longtable}{l|p{0.4\textwidth} p{0.4\textwidth}}
\hline
年代 & 软件技术 & 软件过程与管理 \\ 
\hline
1950s & \mb{machine center application} & \mb{SAGE\footnote{SAGE:Semi-Automated Ground Environment}}\q\mb{hardware effciency}\\
% \hline
1960s & \mb{complier\footnote{complier can optimizing statements well}}\q\mb{function}
& \mb{cowboy}\q\mb{code and fix}\q\mb{herolc debugging}\\ 
% \hline
1970s &  \mb{structured methods}\q\mb{formal methods}
& \mb{waterfall model}\q\mb{formalized top down SP}\q DFD\footnote{DFD:Process modeling}\q ERD\footnote{ERD:Data modeling} \\ 
% \hline
1980s & \mb{object oriented methods}\q reuse\q\mb{test tools}\q\mb{SCM tools}\q IPSEs\footnote{IPSEs:Integrated Project Support Environment}\q CASEs\footnote{CASEs:Computer Aided Software Engineering}
& productivity\q\mb{industrial engineering}\q\mb{execution support}\q standards\q CMMs\footnote{CMMs:capability maturity model for software} \\ 
% \hline
1900s & distributed\q\mb{large scale}\q middleware\q components\q CDE\q COTS\q\mb{reverse engineering}\q\mb{design patterns} 
& Agile\q\mb{CMM cultures}\q PSP\footnote{PSP:Personal Software Process}\q TSP\footnote{TSP:Team Software Process} \q CMMI\footnote{capability maturity model for individual}\q RUP\footnote{Rational unified process}\q UML\q\mb{domain engineering} \q\mb{open source}\\ 
% \hline
2000s &  & \mb{Risk Driven}\q\mb{Hybrid Products}\q\mb{Model driven}\q\mb{service oriented architectures} \\
\hline
\end{longtable}
\end{center}
\begin{multicols}{2} 
\section{软件工程的理解}
\subsection{软件工程的定义}
\paragraph{}
软件工程是：(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护，即将工程化的方法应用于软件。(2)在(1)中所述的方法和研究。
\subsection{软件工程的工程性的理解}
\paragraph{}
犹如建筑工程往往重视建筑成本，时间，质量控制，人员的调度，经济效益等等，而不是在意与如何砌砖头，软件工程也是如此。软件工程工程性是指软件工程师们将软件科学，软件技术，软件管理和实践经验应用到实际软件工业中。所以我觉得工程性是科学技术与实际生产之间的桥梁，它更关注如何能更好地生产有实用价值的软件。
\subsection{软件工程与编程关系的理解}
\paragraph{}
具体的编程技术是软件过程的一个实现阶段。不同的编程技术可以一定程度体现当时的软件工程思想，比如C体现的结构化思想，smalltalk体现了面向对象，ruby on rails则体现了敏捷的思想。用汇编作敏捷开发显然有些不伦不类。所以我觉得编程与软件工程不是全无关系，编程是软件工程的一个重要组成部分。而软件工程可以使整个项目变的可以调度，质量得以控制，更重要是他使一个软件项目和现实世界（包括使用和开发）联系了起来使软件有了应用价值，更好地造就了软件工业。
\paragraph{}
所以我觉的软件工程是一门指导如何开发软件并于实际应用结合的学科，重点在于开发过程。而编程只是与世隔绝的少量编码与设计。
\end{multicols}
\end{document}
